package com.lixin.juc.readwritelock;

public class MainApplication {

    public static void main(String[] args) {
        MyCache myCache = new MyCache();

        // 5个线程用来写
        for (int i = 1; i <= 5; i++) {
            int finalI = i;
            new Thread(() -> {
                myCache.set(String.valueOf(finalI), finalI);
            }, String.valueOf(i)).start();
        }

        // 5个线程用来读
        for (int i = 1; i <= 5; i++) {
            int finalI = i;
            new Thread(() -> {
                System.out.println(myCache.get(String.valueOf(finalI)));
            }, String.valueOf(i)).start();
        }

        // 从结果来看，读与不能共存，等所有写线程执行完毕才能读
        // 写操作用的是独占锁（一次只能被一个线程占用）
        // 读操作用的是共享锁（可以被多个线程同时占用）
    }

}
